package org.liang.transfer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 传输器工厂.
 * 
 * <pre>
 * 自动反射传输器实现类路径并生成传输器。
 * 
 * 传输器路径规则如下：
 *  %VAL_TRANSFER_PACK% + type.lowercase + type.uppercase
 * 其中 ：
 *  VAL_TRANSFER_PACK 代表传输器包名
 *  type.lowercase 代表 传输器实现包名
 *  type.uppercase 代表传输器实现类名
 * 
 * </pre>
 * 
 * @author L.Yang
 * @version v1.0 2016年4月14日 下午2:41:04
 */
public class TransferFactory {

    private static final Logger LOGGER = LoggerFactory.getLogger(TransferFactory.class);

    /** 默认配置文件包路径. */
    private static final String VAL_TRANSFER_PACK = "org.liang.transfer";

    /**
     * 根据传输器类型获取传输器实例.
     * 
     * @param type
     *            传输器类型
     * @return 传输器实例
     */
    public static final Transfer getTransfer(String type) {
        Transfer transfer = null;
        try {
            Class<?> clazz = Class.forName(getClassByType(type));
            transfer = (Transfer) clazz.newInstance();
        } catch (ClassNotFoundException e) {
            LOGGER.error(e.getMessage());
        } catch (InstantiationException e) {
            LOGGER.error(e.getMessage());
        } catch (IllegalAccessException e) {
            LOGGER.error(e.getMessage());
        }
        return transfer;
    }

    private static String getClassByType(String type) {
        return VAL_TRANSFER_PACK + "." + type.toLowerCase() + "." + type.toUpperCase();
    }
}
